From 5b78a3048f7f7fbdd23b7338aa81d7bec237a7ee Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 7 Apr 2019 15:47:24 +0000 Subject: [PATCH] gizmo: Add a contains_func Let GtkGizmo override the contains() implementation. Update all callers to pass NULL for the contains_func. --- gtk/gtkgizmo.c | 18 +++++++++++++++++- gtk/gtkgizmoprivate.h | 8 ++++++-- gtk/gtklevelbar.c | 5 +++-- gtk/gtknotebook.c | 5 +++-- gtk/gtkpaned.c | 5 +---- gtk/gtkpopover.c | 5 +---- gtk/gtkprogressbar.c | 5 +++-- gtk/gtkrange.c | 9 +++++---- gtk/gtkscale.c | 12 ++++-------- gtk/gtkswitch.c | 2 +- gtk/gtktexthandle.c | 3 +-- 11 files changed, 45 insertions(+), 32 deletions(-) diff --git a/gtk/gtkgizmo.c b/gtk/gtkgizmo.c index 305e0b524e..a3ef5d1f23 100644 --- a/gtk/gtkgizmo.c +++ b/gtk/gtkgizmo.c @@ -46,6 +46,19 @@ gtk_gizmo_snapshot (GtkWidget *widget, GTK_WIDGET_CLASS (gtk_gizmo_parent_class)->snapshot (widget, snapshot); } +static gboolean +gtk_gizmo_contains (GtkWidget *widget, + double x, + double y) +{ + GtkGizmo *self = GTK_GIZMO (widget); + + if (self->contains_func) + return self->contains_func (self, x, y); + else + return GTK_WIDGET_CLASS (gtk_gizmo_parent_class)->contains (widget, x, y); +} + static void gtk_gizmo_finalize (GObject *object) { @@ -76,6 +89,7 @@ gtk_gizmo_class_init (GtkGizmoClass *klass) widget_class->measure = gtk_gizmo_measure; widget_class->size_allocate = gtk_gizmo_size_allocate; widget_class->snapshot = gtk_gizmo_snapshot; + widget_class->contains = gtk_gizmo_contains; } static void @@ -88,7 +102,8 @@ GtkWidget * gtk_gizmo_new (const char *css_name, GtkGizmoMeasureFunc measure_func, GtkGizmoAllocateFunc allocate_func, - GtkGizmoSnapshotFunc snapshot_func) + GtkGizmoSnapshotFunc snapshot_func, + GtkGizmoContainsFunc contains_func) { GtkGizmo *gizmo = GTK_GIZMO (g_object_new (GTK_TYPE_GIZMO, "css-name", css_name, @@ -97,6 +112,7 @@ gtk_gizmo_new (const char *css_name, gizmo->measure_func = measure_func; gizmo->allocate_func = allocate_func; gizmo->snapshot_func = snapshot_func; + gizmo->contains_func = contains_func; return GTK_WIDGET (gizmo); } diff --git a/gtk/gtkgizmoprivate.h b/gtk/gtkgizmoprivate.h index c65a430351..4f4f0127c6 100644 --- a/gtk/gtkgizmoprivate.h +++ b/gtk/gtkgizmoprivate.h @@ -27,7 +27,9 @@ typedef void (* GtkGizmoAllocateFunc) (GtkGizmo *gizmo, int baseline); typedef void (* GtkGizmoSnapshotFunc) (GtkGizmo *gizmo, GtkSnapshot *snapshot); - +typedef gboolean (* GtkGizmoContainsFunc) (GtkGizmo *gizmo, + double x, + double y); struct _GtkGizmo { @@ -36,6 +38,7 @@ struct _GtkGizmo GtkGizmoMeasureFunc measure_func; GtkGizmoAllocateFunc allocate_func; GtkGizmoSnapshotFunc snapshot_func; + GtkGizmoContainsFunc contains_func; }; struct _GtkGizmoClass @@ -48,7 +51,8 @@ GType gtk_gizmo_get_type (void) G_GNUC_CONST; GtkWidget *gtk_gizmo_new (const char *css_name, GtkGizmoMeasureFunc measure_func, GtkGizmoAllocateFunc allocate_func, - GtkGizmoSnapshotFunc snapshot_func); + GtkGizmoSnapshotFunc snapshot_func, + GtkGizmoContainsFunc contains_func); #endif diff --git a/gtk/gtklevelbar.c b/gtk/gtklevelbar.c index 2e91c160ac..02794d8a93 100644 --- a/gtk/gtklevelbar.c +++ b/gtk/gtklevelbar.c @@ -580,7 +580,7 @@ update_block_nodes (GtkLevelBar *self) priv->block_widget = g_renew (GtkWidget*, priv->block_widget, n_blocks); for (i = priv->n_blocks; i < n_blocks; i++) { - priv->block_widget[i] = gtk_gizmo_new ("block", NULL, NULL, NULL); + priv->block_widget[i] = gtk_gizmo_new ("block", NULL, NULL, NULL, NULL); gtk_widget_insert_before (priv->block_widget[i], GTK_WIDGET (priv->trough_widget), NULL); } priv->n_blocks = n_blocks; @@ -1076,7 +1076,8 @@ gtk_level_bar_init (GtkLevelBar *self) priv->trough_widget = gtk_gizmo_new ("trough", gtk_level_bar_measure_trough, gtk_level_bar_allocate_trough, - gtk_level_bar_render_trough); + gtk_level_bar_render_trough, + NULL); gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (self)); gtk_level_bar_ensure_offset (self, GTK_LEVEL_BAR_OFFSET_LOW, 0.25); diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 94c2b04ed0..6de6c7e501 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -1294,7 +1294,8 @@ gtk_notebook_init (GtkNotebook *notebook) priv->tabs_widget = gtk_gizmo_new ("tabs", gtk_notebook_measure_tabs, gtk_notebook_allocate_tabs, - gtk_notebook_snapshot_tabs); + gtk_notebook_snapshot_tabs, + NULL); gtk_widget_set_hexpand (priv->tabs_widget, TRUE); gtk_container_add (GTK_CONTAINER (priv->header_widget), priv->tabs_widget); @@ -4044,7 +4045,7 @@ gtk_notebook_insert_notebook_page (GtkNotebook *notebook, else sibling = priv->arrow_widget[ARROW_RIGHT_AFTER]; - page->tab_widget = gtk_gizmo_new ("tab", measure_tab, allocate_tab, NULL); + page->tab_widget = gtk_gizmo_new ("tab", measure_tab, allocate_tab, NULL, NULL); g_object_set_data (G_OBJECT (page->tab_widget), "notebook", notebook); gtk_widget_insert_before (page->tab_widget, priv->tabs_widget, sibling); diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index b39057023f..5bee432ba4 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -1366,10 +1366,7 @@ gtk_paned_init (GtkPaned *paned) gtk_widget_add_controller (GTK_WIDGET (paned), GTK_EVENT_CONTROLLER (gesture)); priv->drag_gesture = gesture; - priv->handle_widget = gtk_gizmo_new ("separator", - NULL, - NULL, - gtk_paned_render_handle); + priv->handle_widget = gtk_gizmo_new ("separator", NULL, NULL, gtk_paned_render_handle, NULL); gtk_widget_set_parent (priv->handle_widget, GTK_WIDGET (paned)); gtk_widget_set_cursor_from_name (priv->handle_widget, "col-resize"); } diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index d09c209733..58cd6473bd 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -371,10 +371,7 @@ gtk_popover_init (GtkPopover *popover) G_CALLBACK (node_style_changed_cb), popover, 0); g_object_unref (priv->arrow_node); - priv->contents_widget = gtk_gizmo_new ("contents", - measure_contents, - allocate_contents, - NULL); + priv->contents_widget = gtk_gizmo_new ("contents", measure_contents, allocate_contents, NULL, NULL); gtk_widget_set_parent (priv->contents_widget, widget); diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index d4c54e443b..029b8a5bff 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -481,10 +481,11 @@ gtk_progress_bar_init (GtkProgressBar *pbar) priv->trough_widget = gtk_gizmo_new ("trough", NULL, allocate_trough, - snapshot_trough); + snapshot_trough, + NULL); gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (pbar)); - priv->progress_widget = gtk_gizmo_new ("progress", NULL, NULL, NULL); + priv->progress_widget = gtk_gizmo_new ("progress", NULL, NULL, NULL, NULL); gtk_widget_set_parent (priv->progress_widget, priv->trough_widget); update_node_classes (pbar); diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index a26e882ec9..586561917e 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -549,11 +549,12 @@ gtk_range_init (GtkRange *range) priv->trough_widget = gtk_gizmo_new ("trough", gtk_range_measure_trough, gtk_range_allocate_trough, - gtk_range_render_trough); + gtk_range_render_trough, + NULL); gtk_widget_set_parent (priv->trough_widget, GTK_WIDGET (range)); - priv->slider_widget = gtk_gizmo_new ("slider", NULL, NULL, NULL); + priv->slider_widget = gtk_gizmo_new ("slider", NULL, NULL, NULL, NULL); gtk_widget_set_parent (priv->slider_widget, priv->trough_widget); /* Note: Order is important here. @@ -1122,7 +1123,7 @@ gtk_range_set_show_fill_level (GtkRange *range, if (show_fill_level) { - priv->fill_widget = gtk_gizmo_new ("fill", NULL, NULL, NULL); + priv->fill_widget = gtk_gizmo_new ("fill", NULL, NULL, NULL, NULL); gtk_widget_insert_after (priv->fill_widget, priv->trough_widget, NULL); update_fill_position (range); } @@ -2825,7 +2826,7 @@ _gtk_range_set_has_origin (GtkRange *range, if (has_origin) { - priv->highlight_widget = gtk_gizmo_new ("highlight", NULL, NULL, NULL); + priv->highlight_widget = gtk_gizmo_new ("highlight", NULL, NULL, NULL, NULL); gtk_widget_insert_before (priv->highlight_widget, priv->trough_widget, priv->slider_widget); update_highlight_position (range); diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 29607a9cca..c57549486e 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -1748,6 +1748,7 @@ gtk_scale_add_mark (GtkScale *scale, priv->top_marks_widget = gtk_gizmo_new ("marks", gtk_scale_measure_marks, gtk_scale_allocate_marks, + NULL, NULL); gtk_widget_insert_after (priv->top_marks_widget, @@ -1767,6 +1768,7 @@ gtk_scale_add_mark (GtkScale *scale, priv->bottom_marks_widget = gtk_gizmo_new ("marks", gtk_scale_measure_marks, gtk_scale_allocate_marks, + NULL, NULL); gtk_widget_insert_before (priv->bottom_marks_widget, @@ -1780,16 +1782,10 @@ gtk_scale_add_mark (GtkScale *scale, marks_widget = priv->bottom_marks_widget; } - mark->widget = gtk_gizmo_new ("mark", - gtk_scale_measure_mark, - gtk_scale_allocate_mark, - NULL); + mark->widget = gtk_gizmo_new ("mark", gtk_scale_measure_mark, gtk_scale_allocate_mark, NULL, NULL); g_object_set_data (G_OBJECT (mark->widget), "mark", mark); - mark->indicator_widget = gtk_gizmo_new ("indicator", - NULL, - NULL, - NULL); + mark->indicator_widget = gtk_gizmo_new ("indicator", NULL, NULL, NULL, NULL); gtk_widget_set_parent (mark->indicator_widget, mark->widget); if (mark->markup && *mark->markup) { diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c index 56a077abd5..c0bc4ecc4f 100644 --- a/gtk/gtkswitch.c +++ b/gtk/gtkswitch.c @@ -652,7 +652,7 @@ gtk_switch_init (GtkSwitch *self) priv->off_image = gtk_image_new_from_icon_name ("switch-off-symbolic"); gtk_widget_set_parent (priv->off_image, GTK_WIDGET (self)); - priv->slider = gtk_gizmo_new ("slider", NULL, NULL, NULL); + priv->slider = gtk_gizmo_new ("slider", NULL, NULL, NULL, NULL); gtk_widget_set_parent (priv->slider, GTK_WIDGET (self)); } diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c index eebfcbd129..5edbee5de5 100644 --- a/gtk/gtktexthandle.c +++ b/gtk/gtktexthandle.c @@ -203,8 +203,7 @@ _gtk_text_handle_ensure_widget (GtkTextHandle *handle, GtkStyleContext *context; GtkEventController *controller; - widget = gtk_gizmo_new (I_("cursor-handle"), - NULL, NULL, snapshot_func); + widget = gtk_gizmo_new (I_("cursor-handle"), NULL, NULL, snapshot_func, NULL); gtk_widget_set_direction (widget, priv->windows[pos].dir); -- 2.30.2